Skip to content

feat: 여행, 스탬프 완료 기능 구현(#47)#52

Merged
chaiminwoo0223 merged 3 commits intodevelopfrom
feature/47
Aug 14, 2025
Merged

feat: 여행, 스탬프 완료 기능 구현(#47)#52
chaiminwoo0223 merged 3 commits intodevelopfrom
feature/47

Conversation

@chaiminwoo0223
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 commented Aug 12, 2025

📌 작업 내용 및 특이사항

✅ 스탬프 완료 API

  • 사용자가 자신의 memberId, tripId, stampId를 이용하여, 특정 스탬프를 완료 처리
  • MissionService.validateAllMissionsCompletedByStampId()를 통해, 특정 스탬프 하위의 모든 미션이 완료되었는지 검증
  • StampPolicy.validateCompleted()를 통해, 특정 스탬프가 이미 완료되었는지 검증
  • StampService.completeStamp()를 통해, 특정 스탬프를 완료 처리한 후, TripcompletedStamps 필드 1 증가

✅ 여행 완료 API

  • 사용자가 자신의 memberId, tripId를 이용하여, 특정 여행을 완료 처리
  • StampService.validateAllStampsCompletedByTripId()를 통해, 특정 여행 하위의 모든 스탬프가 완료되었는지 검증
  • TripPolicy.validateCompleted()를 통해, 특정 여행이 이미 완료되었는지 검증
  • TripService.completeTrip()를 통해, 특정 여행을 완료 처리

✅ 도메인 메서드 추가

  • Trip.increaseCompletedStamps() 메서드 추가

✅ 리포지토리 메서드 추가

  • MissionQueryRepository.existsByStampIdAndCompletedIsFalseAndDeletedAtIsNull() 메서드 추가
  • StampQueryRepository.existsByTripIdAndCompletedIsFalseAndDeletedAtIsNull() 메서드 추가

✅ 서비스 메서드 추가

  • MissionService.validateAllMissionsCompletedByStampId() 메서드 추가
  • StampService.completeStamp(), StampService.validateAllStampsCompletedByTripId() 메서드 추가
  • TripService.completeTrip() 메서드 추가
  • TripService.increaseCompletedStamps() 메서드 추가

✅ 테스트

  • MissionServiceTestValidateAllMissionsCompletedByStampId 단위 테스트 추가
  • StampServiceTestCompleteStamp, ValidateAllStampsCompletedByTripId 단위 테스트 추가
  • TripServiceTestCompleteTrip, IncreaseCompletedStamps 단위 테스트 추가
  • StampControllerIntegrationTestCompleteStamp 통합 테스트 추가
  • TripControllerIntegrationTestCompleteTrip 통합 테스트 추가
  • MissionControllerIntegrationTest에서 특정 여행,스탬프,미션 삭제 시, 도메인.updateDeletedAt() 호출로 변경

🌱 관련 이슈


🔍 참고사항(선택)

  • MissionService에서 updateCompleted -> completeMission 이름 변경
  • MissionService.completeMission()@Transactional 어노테이션 추가
  • StampQueryRepositoryAdapterinfra.querydsl 패키지로 이동
  • Trip.updateCompleted() 비즈니스 로직 개선

📚 기타(선택)

  • MissionControllerIntegrationTest에서 기존에는 missionTestHelper.saveDeletedMission, stampTestHelper.saveDeletedStamp, tripTestHelper.saveDeletedTrip을 호출해 삭제 상태 데이터를 새로 생성했습니다.
  • 기존 방식은 도메인을 재생성 -> 삭제 -> 저장하여, 불필요한 반복 작업을 수행하고, 테스트 의도를 흐리게 합니다.
  • 하지만, 이미 생성된 도메인 객체에 updateDeletedAt()을 직접 호출하면, 바로 삭제 상태를 만들 수 있습니다.
  • 이 방식은 given-when-then 흐름을 단순하고 명확하게 하며, 테스트 실행 속도를 빠르게 할 수 있습니다.
  • 이후 테스트 코드 작성에서도 이 방식을 적용하면, 테스트 실행 속도를 빠르게 하고, 가독성과 유지보수성을 크게 향상시킬 수 있을 것 같습니다.

* feat: MissionQueryRepository, MissionQueryRepositoryAdapter에 existsByStampIdAndCompletedIsFalseAndDeletedAtIsNull 메서드 추가
* feat: MissionErrorCode에 ALL_MISSIONS_NOT_COMPLETED 에러코드 추가
* feat: MissionPolicy에 validateAllCompleted 메서드 추가
* feat: MissionService에 validateAllMissionsCompletedByStampId 메서드 추가
* feat: StampQueryRepository, StampQueryRepositoryAdapter에 existsByTripIdAndCompletedIsFalseAndDeletedAtIsNull 메서드 추가
* feat: StampErrorCode에 STAMP_ALREADY_COMPLETED 에러코드 추가
* feat: StampErrorCode에 ALL_STAMPS_NOT_COMPLETED 에러코드 추
* feat: StampPolicy에 validateCompleted, validateAllCompleted 메서드 추가
* feat: StampService에 completeStamp, validateAllStampsCompletedByTripId 메서드 추가
* feat: Trip에 increaseCompletedStamps 메서드 추가
* feat: TripErrorCode에 TRIP_ALREADY_COMPLETED 에러코드 추가
* feat: TripPolicy에 validateCompleted 메서드 추가
* feat: TripService에 completeTrip 메서드 추가
* feat: StampFacade에 completeStamp 메서드 추가
* feat: TripFacade에 completeTrip 메서드 추가
* feat: StampController에 스탬프 완료 API 추가
* feat: TripController에 여행 완료 API 추가

* refactor: MissionService에서 updateCompleted -> completeMission 이름 변경
* refactor: MissionService.completeMission()에 @transactional 어노테이션 추가
* refactor: StampQueryRepositoryAdapter를 infra.querydsl 패키지로 이동
* refactor: Trip.updateCompleted() 비즈니스 로직 개선

* test: MissionServiceTest에 CompleteMission, ValidateAllMissionsCompletedByStampId 단위 테스트 추가
* test: StampServiceTest에 CompleteStamp, ValidateAllStampsCompletedByTripId 단위 테스트 추가
* test: TripServiceTest에 CompleteTrip 단위 테스트 추가
* test: StampControllerIntegrationTest에 CompleteStamp 통합 테스트 추가
* test: TripControllerIntegrationTest에 CompleteTrip 통합 테스트 추가
* test: MissionControllerIntegrationTest에서 특정 여행,스탬프,미션 삭제 시, updateDeletedAt() 호출로 변경
@chaiminwoo0223 chaiminwoo0223 self-assigned this Aug 12, 2025
@chaiminwoo0223 chaiminwoo0223 added the ✨feature 구현, 개선 사항 관련 부분 label Aug 12, 2025
Copy link
Contributor

@hisonghy hisonghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 작성했습니다
확인부탁드려요!

* refactor: StampFacade.completeStamp() 비즈니스 로직 개선
* refactor: StampService.completeStamp() 비즈니스 로직 개

* test: TripServiceTest에 IncreaseCompletedStamps 단위 테스트 추가

* refactor: StampService에 completeStamp 메서드 비즈니스 로직 개선
Copy link
Contributor

@hisonghy hisonghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!
머지 부탁드려요

@chaiminwoo0223 chaiminwoo0223 merged commit ebc4cee into develop Aug 14, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨feature 구현, 개선 사항 관련 부분

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨[FEAT]: 여행, 스탬프 완료 기능 구현

2 participants